﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;

namespace MapEditor
{
    public class Utils
    {
        //variables global
        static public TilesTexture tiles;
        static public SpriteBatch  spritebatch;
        
        private static List<Vector2I> listPosition = new List<Vector2I>();
        public delegate void delegateDraw(int x, int y);

        /// <summary>
        /// applique une fonction de maniére recursive sur les case adjacente à une position.
        /// </summary>
        /// <param name="n">profondeur de recursion</param>
        /// <param name="x">position sur x</param>
        /// <param name="y">position sur y</param>
        /// <param name="dd">pointeur sur la fonction à appeler</param>
        static public void recursBrush(int n, Vector2I position, delegateDraw dd)
        {
            if (listPosition.Contains(position))
                return;
            listPosition.Add(position);

            dd(position.x, position.y);

            if (--n == 0)
                return;
            recursBrush(n, new Vector2I(position.x - 1, position.y), dd);
            recursBrush(n, new Vector2I(position.x + 1, position.y), dd);
            recursBrush(n, new Vector2I(position.x, position.y - 1), dd);
            recursBrush(n, new Vector2I(position.x, position.y + 1), dd);
        }

        /// <summary>
        /// obligatoirement appelé aprés chaque apelle à recursBrush
        /// </summary>
        static public void resetRecursBrush()
        {
            listPosition.Clear();
        }
    }
}
